﻿//////////////////////////////////////////////////////////////////////////////
//
//  Copyright © 1998-2024 Glodon Company Limited.  All rights reserved.
//
//  Use of this software is subject to the terms of the Glodon license
//  agreement provided at the time of installation or download, or which
//  otherwise accompanies this software in either electronic or hard copy form.  
//
//////////////////////////////////////////////////////////////////////////////

#pragma once
#include "GcmpDatabase.h"
#include "IFileIOStrategy.h"

namespace gcmp
{
    /// \brief 文件保存策略管理器接口
    class GCMP_DATABASE_EXPORT IFileIOStrategyManager
    {
        DEFINE_CAST_BASE(gcmp::IFileIOStrategyManager)
    public:
        /// \brief 获得文件保存策略管理器实例指针
        /// \return 文件保存策略管理器实例指针
        static IFileIOStrategyManager* Get();

        /// \brief 注册用户自定义的文件保存策略至管理器
        /// \param opFileIOStrategy 用户自定义的文件保存策略
        /// \return 无
        static bool RegisterFileIOStrategy(OwnerPtr<IFileIOStrategy> opFileIOStrategy);

        /// \brief 获得自定义文件保存策略
        /// \return 自定义文件保存策略
        virtual IFileIOStrategy* GetFileIOStrategy() = 0;

        /// \brief 获得平台默认的文件保存策略
        /// \return 平台默认的文件保存策略
        static OwnerPtr<IFileIOStrategy> GetDefaultFileIOStrategy();
    };
}
